# 这里使用了三函数嵌套
# 第一层：用来接收装饰器参数：permission_level
# 第二层：用来接收被装饰的函数：func
# 第三层：实现具体逻辑
# 使用三层函数嵌套的原因：需要传递参数给装饰器，同时保留原函数的调用方式
def require_permission(permission_level):
    """权限控制器装饰器"""
    def decorator(func):
        def wrapper(*args, **kwargs):
            # 模拟获取当前用户的权限
            current_user_level = getattr(wrapper, "_user_level", 0)
            if current_user_level < permission_level:
                raise PermissionError(f"需要权限等级{permission_level},当前权限等级为{current_user_level}")
            print(f"权限检查通过，执行{func.__name__}")
            return func(*args, **kwargs)
        return wrapper
    return decorator

# 模拟用户权限设置函数
def set_user_level(level):
    """设置当前用户权限等级"""
    def decorator(func):
        func._user_level=level
        return func
    return decorator

# 使用装饰器
@set_user_level(3)
@require_permission(2)
def view_reports():
    print("查看报表")

@set_user_level(1)
@require_permission(5)
def delete_user(user_id):
    print("删除用户")

# 测试
try:
    result = view_reports()
    print( result)

    delete_user(1)
except PermissionError as e:
    print(e)